Passwords have become so common in modern life that most people are typically aware of them only when they forget them, or they are stolen. Indeed, in all likelihood, almost all the readers of this disclosure probably had to enter some form of password, either manually or automatically, just to access the computer that downloaded and is displaying it.
By their nature, passwords assume secrecy. Sadly, this assumption is often unjustified. When users are allowed to choose their own passwords, they all too often choose ones laughably easy to predict. One study, for example, showed that the five most commonly used passwords in 2014 in North America were “123456”, “password”, “12345”, “12345678”, and “qwerty”. Many sites and administrators therefore require, or assign, passwords that are more difficult to predict or determine through brute force, that is, exhaustive computational trial and error. Even this is insufficient in many cases, however; moreover, even the most complicated password is worse than useless if it is stolen, for example, through interception from an issuer or user, through key-logging, hacking of the computer in which it is stored, etc.
In some systems, passwords themselves may have been prudently chosen, but they are still susceptible to replay attacks: If an attacker intercepts some “secure” token or password passed from the system to an intended, authorized user, the attacker might be able to use the token/password over and over.
One way to avoid or at least reduce the risk and damage of password theft is to require some additional, time-limited action or entry of additional information, such as clicking on a link included in a confirmation email, or a secondary code sent through a secondary channel such as sms to the user's phone, obtaining a one-time password (OTP) from a special hardware device such as a dongle, etc. Such methods are sometimes referred to as two-factor authentication (2FA). Requiring a user to go through such a procedure each time he wants to log into or initiate something is often inconvenient, however, and still doesn't eliminate the problem of hacking, or replay attacks; moreover, in systems that use a hardware-based, secondary password generator, the user must also have with him and always protect the dongle or similar device.
In U.S. Pat. No. 8,683,564, Khan, et al., disclose “one-time password authentication with infinite nested hash claims”. In that scheme, “a client device [ ] provides a one-time password (OTP) authentication server with certain registration information. The client device generates, via the OTP authentication server, an authenticated OTP with infinite nested hash chains. These generating operations use a first hash function . . . for updating a seed chain, a second hash function . . . for OTP production, an OTP seed number stOTP for a tth authentication, and two authentication seeds of numbers s2t−1Auth and s2t−1Auth, for the tth authentication.”
One problem of existing solutions is the complexity of bookkeeping: Hash chain values, seed value(s), and counters must all be stored and protected against attack, such as alteration of the data used to generate the passwords, or the passwords themselves. Another problem of many current one-time password arrangements is that they require a user to contact some form of administrator, such as a customer support representative, who then sends the one-time password usually over an insecure channel such as through email or as a text message (sms).
What is needed is a way to generate passwords that is at least as secure as existing methods provide, with at least one parameter that is infeasible to hack and alter.